Micron Document
____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|


🬧 The NomadNet Encyclopedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

πŸ” Search

Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―

Array
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Un mwbqarraycite-ref-1[N 1] (mwcgAFI: /arˈrΙ›i/cite-ref-2[1], detto anche mweavettore o mweqmatricecite-ref-3[2]) in mwfginformatica, indica una mwfwstruttura dati complessa, statica e omogenea.

Gli array, presenti praticamente in tutti i mwgqlinguaggi di programmazione o di scripting, sono ispirati alla nozione mwggmatematica di mwgwvettore (quando monodimensionali) o di mwhamatrice (nel caso di array bidimensionali). L'array Γ¨ in genere classificato come un costruttore di tipo: in altre parole, esso consente di definire nuovi mwhgtipi di dati a partire da tipi preesistenti, attraverso l'aggregazione di diversi oggetti tutti di uno stesso tipo. Ciascun oggetto componente Γ¨ individuato attraverso un indice intero, nel caso monodimensionale, o attraverso mwhw D {\displaystyle D} indici interi nel caso mwia D {\displaystyle D} -dimensionale.

Contents

β€’ Note

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Caratteristiche principali

Si può immaginare un array come una sorta di contenitore, le cui caselle sono dette celle (o elementi) dell'array stesso. Ciascuna delle celle si comporta come una mwkqvariabile tradizionale; tutte le celle sono mwkgvariabili di uno stesso tipo preesistente, detto tipo base dell'array. Si parlerà perciò di tipi come "array di interi", "array di stringhe", "array di caratteri" e così via. Quello che si ottiene dichiarandolo è dunque un contenitore statico ed omogeneo di valori, variabili o mwkwoggetti. In alcuni linguaggi, la dimensione dell'array (ovvero il numero celle di cui esso è composto) viene considerato parte della definizione del tipo array; in tal caso, si parlerà più precisamente di tipi come "array di cento caratteri" o "array di dieci interi".

Ciascuna delle celle dell'array Γ¨ identificata da un valore di indice. L'indice Γ¨ generalmente numerico e i valori che gli indici possono assumere sono numeri interi contigui che partono da 0cite-ref-4[3] o da 1cite-ref-5[4] o, piΓΉ raramente, da un valore arbitrario, come in mwnqPascal. Si potrΓ  quindi parlare della cella di indice 0, di indice 1, e, in generale, di indice mwng N {\displaystyle N} , dove mwnw N {\displaystyle N} Γ¨ un intero compreso fra 0 (o 1) e il valore massimo per gli indici dell'array.

La possibilità di accedere agli elementi attraverso un indice è la principale caratteristica di un array. È possibile accedere singolarmente ad una sua generica posizione ("accesso casuale", come per la memoria), oltre a scorrerlo sequenzialmente in entrambe le direzioni tramite un mwoqciclo iterativo in tutti i suoi elementi o a partire da alcuni di essi.

Ecco un esempio, che si serve della sintassi mwowC (simile, comunque, a quella di molti altri linguaggi) per definire un array e assegnare valori ai suoi elementi:

int vettore[10]; /* definisce la variabile di nome "vettore" come array di 10 elementi interi */
vettore[0] = 0; /* assegna il valore "0" alla cella di indice 0 */
vettore[1] = 1;
vettore[2] = 1;
vettore[3] = 2;
vettore[4] = 3;

Alcuni linguaggi ammettono indici di tipo non numerico, per esempio stringhe. Si parla in questo caso di mwgwmwhahash table, o di mwhqarray associativo, perchΓ© ogni valore mwhgstringa utilizzato come indice viene associato a un valore dell'array. Segue un esempio in linguaggio mwhwPHP:

$persona["nome"] = "Mario";
$persona["cognome"] = "Rossi";
$persona["eta"] = 32;

Come si vede, l'esempio Γ¨ molto simile al precedente; l'unica differenza rilevante (se si esclude una piccola differenza puramente sintattica tra i linguaggi) Γ¨ che l'indice dell'array Γ¨ di tipo stringa. Inoltre, il lettore esperto potrΓ  osservare che in PHP non esiste il vincolo di un "tipo base" fissato per tutte le celle dell'array: alle prime due Γ¨ stata assegnata una mwpastringa, alla terza un mwpqnumero intero.

Array multidimensionali

È infine da segnalare che un array (sia esso associativo, come in PHP, o meno) può avere più di una dimensione. Nel caso un array abbia più dimensioni, e specialmente nel caso bidimensionale, esso viene spesso definito "matrice", in riferimento alla nozione matematica di mwqamatrice da cui prende ispirazione. La differenza è che una matrice ha due (o più) indici, ognuno dei quali indicizza una dimensione, e ogni elemento è identificato dalla combinazione dei valori di tutti gli indici del vettore, in un ordine prefissato. Ecco un esempio:

A[0][0] = 1;
A[0][1] = 2;
A[1][0] = -1;
A[1][1] = 1;

In questo esempio numerico ai quattro elementi dell'array bidimensionale A sono stati dati alcuni valori numerici. Ogni elemento Γ¨ identificato univocamente, e quindi accessibile, solo specificando entrambi gli indici. Inoltre, non Γ¨ possibile scambiare la posizione degli indici: infatti l'elemento mw3qA[0][1], che vale 2, Γ¨ diverso dall'elemento mw3gA[1][0], che vale -1.

Nell'esempio seguente, invece, si presenta un caso di indicizzazione mediante stringhe:

$persona[0]["nome"] = "Samuele";
$persona[0]["cognome"] = "Rossi";
$persona[1]["nome"] = "Giorgio";
$persona[1]["cognome"] = "Bianchi";

In questo caso ogni valore corrisponde a una caratteristica di una certa persona. Il primo indice, in questo caso numerico (per esempio una matricola), identifica una persona. Il secondo indice, in questo caso una stringa, indica la caratteristica in questione. Di conseguenza per accedere a un elemento non è sufficiente il primo indice, perché non indica quale caratteristica occorra; ma nemmeno il secondo, perché non indica a quale persona ci si stia riferendo. È dunque la combinazione di entrambi gli indici a identificare un valore.

Un array a due dimensioni Γ¨ visualizzabile come una tabella, in cui la prima colonna contiene i valori di un indice, la prima riga i valori di un altro indice e le singole celle i vari elementi. Per gli stessi principi, se ha tre dimensioni Γ¨ visualizzabile come un cubo. Una matrice potrebbe contenere anche piΓΉ di tre indici, ma ciΓ² avviene solo in casi molto particolari, per esempio in applicazioni scientifiche o di mwaq0data warehousing. Una matrice a tre o piΓΉ dimensioni Γ¨ piΓΉ precisamente definita mwaq4tensore.

Array e strutture di controllo

La maggior parte dei programmi che utilizzano array si serve della mwarestruttura di controllo "mwaricicli for" per attraversare gli array, ovvero per accedere sequenzialmente alle celle. Il ciclo for si presta molto naturalmente all'uso combinato dell'array proprio perchΓ© consente di specificare un tipo particolare di mwarmiterazione di un certo insieme di istruzioni, controllato da un indice che assume un insieme di valori solitamente interi e contigui. Per esempio, il codice Java per stampare i contenuti di un array di n interi potrebbe essere come segue:

for(int i=0; i<vettore.length; i++) // per i crescente con passo 1 da 0 alla lunghezza del vettore
System.out.println(vettore[i]); // stampa la i-esima cella

Di seguito un semplice algoritmo per calcolare il massimo, il minimo e la media di un vettore di interi scritto usando il linguaggio di programmazione Java:

if(vettore != null && vettore.length != 0) //controllo se il vettore contiene almeno un elemento
{ double media;
int max = vettore[0], min = vettore[0], somma = vettore[0];
for(int i=1;i<vettore.length;i++) //scansione con passo 1 da 0 fino alla lunghezza del vettore
{ if(vettore[i]>max)
max = vettore[i];
if(vettore[i]<min)
min = vettore[i];
somma += vettore[i];
}
media = ((double)somma)/vettore.length;
System.out.println("Minimo: " + min);
System.out.println("Massimo: " + max);
System.out.println("Somma: " + somma);
System.out.println("Media: " + media);
}
else{
System.out.println("Il vettore non contiene alcun elemento");
}

Aspetti implementativi

Gli array sono generalmente allocati in aree contigue della mwaigmemoria del computer. Un array occuperΓ  un'area di memoria le cui dimensioni complessive sono date dalla dimensione del tipo base moltiplicata per il numero totale di celle. Il reperimento di un elemento su base indice avviene sommando all'indirizzo di memoria di partenza dell'array (noto al mwaikcompilatore o all'mwaiointerprete) il valore dell'indice moltiplicato per la dimensione del tipo base. CosΓ¬, se un array di interi viene allocato all'indirizzo mwais1 000 della memoria, su una macchina in cui gli interi occupano mwaiw4 byte, il suo quinto elemento (che ha indice quattro) sarΓ  allocato alla posizione mwai0 1000 + ( 4 Γ— Γ— ( 5 βˆ’ βˆ’ 1 ) ) = 1016 {\displaystyle 1000+(4\times (5-1))=1016} . Questa regola permette di ottenere accessi efficienti alle celle dell'array in termini di tempo speso, attraverso mwai4meccanismi di indirizzamento indiretto che sono forniti da tutti i mwai8processori (e quindi da tutti i linguaggi macchina) oppure tramite la manipolazione numerica di puntatori all'interno del programma.

Controllo sui limiti

Alcuni linguaggi, soprattutto fra quelli mwajmcompilati, non impongono all'ambiente di mwajqesecuzione alcun controllo sulla correttezza degli indici utilizzati per accedere a una determinata cella di un array. Di conseguenza, in un mwajuprogramma scritto in C, se un array di venti elementi di dimensione mwajy2 byte Γ¨ allocato all'indirizzo mwajc1 000, l'ultima cella valida ha indice 19 e indirizzo mwajg1 038; ma se il mwajkprogrammatore, per errore, tenta di accedere alla quarantesima cella (che non esiste), il linguaggio non rileverΓ  l'errore e fornirΓ  un accesso scorretto alla locazione di memoria mwajo1 078.

In genere, questi linguaggi di programmazione non stabiliscono il risultato esatto della lettura o della scrittura fuori dai limiti degli array, e ciΓ² rende questo meccanismo una fonte di mwajwbug nei programmi che calcolano un valore degli indici errato. Il motivo Γ¨ che la disposizione e l'allineamento dei dati memorizzati all'interno del programma (quindi, la corrispondenza tra le celle della memoria e le celle degli array e le variabili) dipendono sia dall'implementazione del compilatore adottato, sia dall'implementazione dell'architettura del sistema su cui il programma sarΓ  eseguito.

Nel migliore dei casi, se la memoria a cui si Γ¨ tentato di accedere non era stata allocata dal programma, il risultato sarΓ  la lettura di un valore casuale o la scrittura su una locazione di memoria non utilizzata in alcun'altra parte del programma; nel caso peggiore, Γ¨ possibile che quella zona di memoria fosse invece allocata per una variabile o per un altro array, e di conseguenza il programma sovrascriverebbe i propri dati, alterando la propria esecuzione in modo imprevedibile.

Questo tipo di errori nell'indicizzazione degli array sono, insieme agli errori sui puntatori, fra le piΓΉ frequenti cause di malfunzionamento di programmi scritti nei linguaggi mwaj8C e mwakaC++. Altri linguaggi (per esempio mwakeJava) impongono che l'ambiente di esecuzione in cui il programma viene lanciato blocchi gli accessi agli array fuori dai limiti imposti, ed eventualmente segnali questo problema con un errore all'interno del programma.

Note

Annotazioni

cite-note-1N 1. ↑ Per una discussione sull'ipotetica traduzione italiana del vocabolo mwakoarray, con cenni alla sua mwaksetimologia, si veda β€” in nota β€” la voce mwakwWullenweber.

Fonti

cite-note-21. ↑ mwalqmwalumwalyDiPI Online - Dizionario di Pronuncia Italiana, su mwalcdipionline.it. mwalgURL consultato il 17 marzo 2024.
cite-note-32. ↑ mwalwmwal0mwal4array su Enciclopedia | Sapere.it, su mwal8sapere.it, 5 giugno 2020. mwamaURL consultato il 17 marzo 2024.
cite-note-43. ↑ mwamq(mwamumwamyEN) mwamcmwamgArray Code Examples - PHP Array Functions - PHP code, su mwamkconfigure-all.com, Computer Programming Web programming Tips. mwamoURL consultato l'8 aprile 2011 mwams(archiviato dall'mwamwurl originale il 13 aprile 2011). mwam4Β«In most computer languages array index (counting) starts from 0, not from 1. Index of the first element of the array is 0, index of the second element of the array is 1, and so on. In array of names below you can see indexes and values.Β»
cite-note-54. ↑ mwani(mwanmmwanqEN) mwanumwanyChapter 6 - Arrays, Types, and Constants, su mwancmodula2.org. mwangURL consultato l'8 aprile 2011. mwanoΒ«The names of the twelve variables are given by Automobiles[1], Automobiles[2], ... Automobiles[12]. The variable name is "Automobiles" and the array subscripts are the numbers 1 through 12. [i.e. in Modula-2, the index starts by one!]Β»

Voci correlate

β€’ mwan4Struttura dati
β€’ mwaoaArray dinamico
β€’ mwaoiArray associativo
β€’ mwaoqJagged array
β€’ mwaoyDope vector

Altri progetti

Altri progetti

β€’ Wikizionario
β€’ Wikimedia Commons

β€’ Wikizionario contiene il lemma di dizionario Β«arrayΒ»
β€’ Wikimedia Commons contiene immagini o altri file sull'array

Collegamenti esterni

β€’ citerefenciclopedia-della-scienza-e-della-tecnicaMauro Cappelli, Array, in Enciclopedia della scienza e della tecnica, Istituto dell'Enciclopedia Italiana, 2008.
β€’ citerefsapere-itarray, su sapere.it, De Agostini.
β€’ citerefenciclopedia-della-matematicaarray, in Enciclopedia della Matematica, Istituto dell'Enciclopedia Italiana, 2013.
β€’ citerefmathworld(EN) Eric W. Weisstein, Array, su MathWorld, Wolfram Research.
β€’ citereffoldoc(EN) Denis Howe, Array, in Free On-line Dictionary of Computing. Disponibile con licenza mwao0GFDL
β€’ mwao8Array e Iteratori su "Imparare a Programmare", libro gratuito sulle basi della programmazione.